package internal

import (
	"github.com/gogf/gf/v2/text/gstr"
	// "go.opentelemetry.io/otel/trace"
	// "github.com/beherochuling/beesoft_api/library/easyVendor/aliyun"
	// "github.com/beherochuling/beesoft_api/library/helper"
)

// var (
// 	enableCallerFunc = g.Config().MustGet(context.Background(), "logger.caller.func").Bool()
// 	enableCallerPath = g.Config().MustGet(context.Background(), "logger.caller.path").Bool()
// 	enableAsync      = g.Config().MustGet(context.Background(), "logger.async").Bool()
// 	enableWriteToSLS = g.Config().MustGet(context.Background(), "logger.writeToAliyunSls").Bool()
// 	enableWriteToStd = g.Config().MustGet(context.Background(), "logger.stdout").Bool()
// )

// func traceIdStr(ctx context.Context) string {
// 	if ctx == nil {
// 		return ""
// 	}
// 	spanCtx := trace.SpanContextFromContext(ctx)
// 	if traceId := spanCtx.TraceID(); traceId.IsValid() {
// 		return traceId.String()
// 	}
// 	return ""
// }

func formatCallerFunctionName(funcName string) string {
	// [wxgf/library/easyVendor/aliyun.handler.Handle]
	// 1).  wxgf/app/api.(*helloApi).Index
	funcName = gstr.Trim(funcName, "[]")
	// wxgf/library/easyVendor/aliyun.handler.Handle
	funcParts := gstr.SplitAndTrim(funcName, "/")
	if len(funcParts) > 0 {
		// aliyun.handler.Handle
		funcName = gstr.Trim(funcParts[len(funcParts)-1])
	}
	return funcName
}

// func formatCallerPath(path string) string {
// 	// /Users/harry/Projects/WWW/git/backend/packages/golang/wxgf/library/easyVendor/aliyun/trace.go:23
// 	// => library/easyVendor/aliyun/trace.go:23
// 	file := gstr.Trim(gstr.Replace(path, helper.File.GetAppRootDir()+"/", ""))
// 	return file
// }

// func initLog() {
// 	var defaultLevelColor = map[int]color.Attribute{
// 		glog.LEVEL_DEBU: glog.COLOR_YELLOW,
// 		glog.LEVEL_INFO: glog.COLOR_GREEN,
// 		glog.LEVEL_NOTI: glog.COLOR_CYAN,
// 		glog.LEVEL_WARN: glog.COLOR_MAGENTA,
// 		glog.LEVEL_ERRO: glog.COLOR_RED,
// 		glog.LEVEL_CRIT: glog.COLOR_HI_RED,
// 		glog.LEVEL_PANI: glog.COLOR_HI_RED,
// 		glog.LEVEL_FATA: glog.COLOR_HI_RED,
// 	}
//
// 	if enableCallerPath && enableCallerFunc {
// 		glog.SetFlags(glog.F_CALLER_FN | glog.F_FILE_LONG | glog.F_TIME_STD)
// 	} else if enableCallerPath {
// 		glog.SetFlags(glog.F_FILE_LONG | glog.F_TIME_STD)
// 	} else if enableCallerFunc {
// 		glog.SetFlags(glog.F_CALLER_FN | glog.F_TIME_STD)
// 	}
// 	glog.SetAsync(enableAsync)
//
// 	aliyun.Sls.StartProducer()
//
// 	if enableWriteToSLS {
// 		glog.SetHandlers(func(ctx context.Context, in *glog.HandlerInput) {
// 			if ctx != nil {
// 				// 由 boot/internal/init_gf_route.go 中间件自动捕获的异常
// 				// 会携带 context，里面是真正的业务error
// 				err := ctx.Value("middleware_error")
// 				if err != nil {
// 					in.Content = gerror.Stack(err.(error))
// 					lines := gstr.Split(in.Content, "\n")
// 					if len(lines) > 3 {
// 						in.CallerFunc = lines[1]
// 						in.CallerPath = lines[2]
// 					}
// 				}
// 			}
// 			in.CallerPath = formatCallerPath(in.CallerPath)
// 			in.CallerFunc = formatCallerFunctionName(in.CallerFunc)
// 			in.Content = gstr.Replace(in.Content, helper.File.GetAppRootDir()+"/", "")
//
// 			data := g.Map{
// 				"raw":   in.Content,
// 				"func":  in.CallerFunc,
// 				"file":  in.CallerPath,
// 				"ts":    in.TimeFormat,
// 				"level": gstr.ToLower(gstr.Trim(in.LevelFormat, "[]")),
// 			}
//
// 			traceId := traceIdStr(ctx)
// 			if traceId != "" {
// 				data["trace_id"] = traceId
// 			}
//
// 			aliyun.Sls.PutLogs(data)
// 			if enableWriteToStd {
// 				c := color.New().Add(defaultLevelColor[in.Level])
// 				/*
// 					2022-03-07 11:26:12.680 [ERRO] {4d1dfe907e5f2737172602ec4bb131e7} [wxgf/boot/internal.parseStackFromError.func1] /Users/harry/Projects/WWW/git/backend/packages/golang/wxgf/boot/internal/init_gf_route.go:40: exception recovered: panic test ###
// 					Stack:
// 					1.  wxgf/boot/internal.parseStackFromError.func1
// 				*/
// 				in.CallerFunc = fmt.Sprintf("[%s]", in.CallerFunc)
// 				if traceId != "" {
// 					c.Println(in.TimeFormat, in.LevelFormat, "{"+traceId+"}", in.CallerFunc, in.CallerPath, in.Content)
// 				} else {
// 					c.Println(in.TimeFormat, in.LevelFormat, in.CallerFunc, in.CallerPath, in.Content)
// 				}
// 			}
// 		})
// 	}
// }
